接續著上一篇環境安裝完畢,
再來就是要增加 Data Source,
不過赫然發現 self hosted 的版本比線上少了:CSV (from URL)、Cassandra、Oracle、
ScyllaDB、Snoflake,是有多出 Sqlite (Python 的部分還要特別設定,後續章節會再介紹),
不知道後面有沒有時間來的去研究線上多出的這些是官方文件寫錯,
還是跟 Python 一樣要特別設定才能支援。
這次串接和 Redash 體驗那篇文章中 NBA dataset 同一個 MySQL server,
只不過這次換成了 IMDB 來試試
https://relational.fit.cvut.cz/dataset/IMDb
可以發覺不管哪個 dataset , host、帳密等都一樣,不同的點是 database,
那在 Redash 之中,雖然設定頁面 Database Name 必填,
但其實如果 host、帳密相同,而且有同樣的權限,是可以只要設定一個 Datasource ,
在 Query 裡面透過指定 database 的方式也是可以跨 db 搜尋
可以看到在 Query 介面中,最左方區塊是 Datasource,
以我們剛建立的 RELATIONAL 為例,雖然 Database Name 填的是 imdb_ijs
照理說只會顯示 directors_genres, directors, movies_directors,
movies_genres, movies, roles, actors 這幾張 table,
但如果以「movie」下去 filter,會看到其他 database 的 table 以及相關欄位,
他的名稱會以「db_name.table_name」的方式呈現,也是同樣能直接以SQL去query。
eg. 以下例子是搜尋 database 為 imdb_small 的 directors 這張 table
SELECT * FROM imdb_small.directors
而在如果 query 的 db 是和 datasource 設定的相同,
是可以省略 db 直接寫 table 名稱就好
SELECT * FROM movies
按下 Execute 就可以 query 出結果
以 IMDB dataset 來說,
大家看電影除了電影內容之外,演員也是一個很重要的元素
我們就來 query 出 movies 與 actors 的資料,
也一起體驗 Redash 預設 Visualization 但很強大的 Table 功能
SELECT movies.name AS movie,
CONCAT("<a href='https://www.imdb.com/find?q=",movies.name,"' target='_blank'>search on IMDB</a>" ) as search,
movies.year, CONCAT(actors.first_name,' ',actors.last_name) AS actor
FROM movies
INNER JOIN roles ON movies.id = roles.movie_id
INNER JOIN actors ON roles.actor_id = actors.id
WHERE movies.year > 2002
ORDER BY year DESC
LIMIT 1000
當然 Table 少不了的排序功能,就算 SQL 中有指定預設欄位的排序方式,
在 Redash 的 Table Visualization 也是可以單獨對某一欄位做排序。
看到這邊,會想說上面 SQL 還有跑出來的結果,為什麼要寫一段 HTML 內容在裡面,
這算是 Table Visualization 的功能之一,我們進到 「Edit Visualization」來一探究竟!
在 Table Visualization 的編輯選項中,
我們可以針對每個欄位設定是否要顯示、內容對齊方式,以及調整排列順序。
另外大部分的數字我們會習慣有千位一個逗號的格式,但很少會對年份做這種格式,
裡面也可以針對 Number format 做調整。
而 Display as 可以設定顯示的類別,像是還有 Link 可以選擇,
就可以按照 Redash 規定的 format,建立出超連結,
同時也對 Text 顯示方式支援 HTML 內容 (Allow HTML content),
因此可以看到 SQL 建立出包含 HTML 內容的 「search on IMDB」欄位,
與 使用 Link 顯示方式的 movie 欄位有相同的超連結功能。
如果欄位有勾選 「Use for Search」,
Redash 會在資料顯示的上方產生一個 search bar,針對所有的欄位找尋是否出現該關鍵字,
以圖中為例,就是找尋在 movie 或是 actor 有出現「Phoenix」的關鍵字
(不過就沒有像 jQuery DataTables 可以針對每個 column 做 searching 那麼強大)
Redash Table 的功能基本上概括了最常用的報表功能,
個人在公司的案例是通常內部需要各種總表式的表格
eg. 訂單列表,通常希望可以搜尋顧客姓名、產品名稱,也能以下訂日期排序....etc,
不同部門可能在乎的資料欄位不同,就可以調整 Table Visualization 設定中不同的欄位顯示與排列,來達到各自的需求。
如果按照以前就是要先拉 SQL 出來,然後再套版跟調整 DataTables 的 js 參數,
然後再把連結 link 到公司內部的後台系統
Redash Table 基本上算是可以取代掉這部分的工,
只要專心取得正確的資料就好,而且也能確保同樣的 query 內容在多張報表間,
不會有重複 SQL 在各地的程式碼中出現,造成未來維護的麻煩。
ps. 文章同步發表於 Medium